package com.itheima.ssm.domain;

import com.itheima.ssm.utils.DateUtils;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;

/**
 * 商品信息Bean
 */
public class Product {
    private String id; // 主键
    private String productNum; // 编号 唯一
    private String productName; // 商品名称
    private String cityName; // 出发城市
    /*
        注意此处的类型转换，由于页面收到的数据为字符串类型，但是封装成Bean需要转化为date类型
        虽然我们之前定义类DateUtils，帮助我们实现String-->Date,但是此处我们却无法使用，应为
        当我们提交表单之后会发生一个自动的映射，有springmvc帮助我们来封装页面的数据为Bean，所以
        这里我们并不能人为来实现，但是springmvc提供了一些类型转化的方式1. 重写convert接口 这是
        全局转化 2. 属性编辑器此方式比较复杂  3.使用注解@DateTimeFormat(pattern = "yyyy:MM:dd HH:mm:ss")
        这是局部的方式
     */
    @DateTimeFormat(pattern = "yyyy:MM:dd HH:mm:ss")
    private Date departureTime; // 出发时间
    private String departureTimeStr;
    private double productPrice; // 产品价格
    private String productDesc; //  产品描述
    private Integer productStatus; // 状态 0 关闭  1 开启
    private String productStatusStr;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getProductNum() {
        return productNum;
    }

    public void setProductNum(String productNum) {
        this.productNum = productNum;
    }

    public String getProductName() {
        return productName;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }

    public String getCityName() {
        return cityName;
    }

    public void setCityName(String cityName) {
        this.cityName = cityName;
    }

    public Date getDepartureTime() {
        return departureTime;
    }

    public void setDepartureTime(Date departureTime) {
        this.departureTime = departureTime;
    }

    public String getDepartureTimeStr() {
        // 此时我们需要将日期转化为字符串返回
        if (departureTime != null) {
            // 如果当前日期不为空
            String dateString = DateUtils.date2String(departureTime, "yyyy-MM-dd HH:mm:ss");
            departureTimeStr = dateString;
        }
        return departureTimeStr;
    }

    public void setDepartureTimeStr(String departureTimeStr) {
        this.departureTimeStr = departureTimeStr;
    }

    public double getProductPrice() {
        return productPrice;
    }

    public void setProductPrice(double productPrice) {
        this.productPrice = productPrice;
    }

    public String getProductDesc() {
        return productDesc;
    }

    public void setProductDesc(String productDesc) {
        this.productDesc = productDesc;
    }

    public Integer getProductStatus() {
        return productStatus;
    }

    public void setProductStatus(Integer productStatus) {
        this.productStatus = productStatus;
    }

    public String getProductStatusStr() {
        // 由于数据库中的ProductStatus采用的时整形变量，但是我们显示在页面中的是字符串
        // 0 关闭  1 开启  0，1 是数据库中存储的，显示的是关闭和开启
        // 所以这里我们需要简单的判断，即当我们从数据库中取出数据之后将其封装成一个Bean对象
        // 我们判断bean中的ProductStatus整形变量的状态
        if (productStatus != null) {
            if (productStatus == 0) {
                productStatusStr = "关闭";
            }
            if (productStatus == 1) {
                productStatusStr = "开启";
            }
        }
        return productStatusStr;
    }

    public void setProductStatusStr(String productStatusStr) {
        this.productStatusStr = productStatusStr;
    }

    @Override
    public String toString() {
        return "Product{" +
                "id='" + id + '\'' +
                ", productNum='" + productNum + '\'' +
                ", productName='" + productName + '\'' +
                ", cityName='" + cityName + '\'' +
                ", departureTime=" + departureTime +
                ", departureTimeStr='" + departureTimeStr + '\'' +
                ", productPrice=" + productPrice +
                ", productDesc='" + productDesc + '\'' +
                ", productStatus=" + productStatus +
                ", productStatusStr='" + productStatusStr + '\'' +
                '}';
    }
}
